package userfunctions;

import userfunctions.packets.client.PacketLoginResponse;
import userfunctions.packets.client.PacketLogin;
import userfunctions.packets.*;

/**
 * Klasa managera logowania.
 * @brief Klasa służąca do zalogowania uzytkownika do systemu.
 * @author Kamil Woźnicki i Michał Krajewski
 */
public class LoginManager {    
    /**
     * Metoda służąca do logowania użytkownika do systemu.
     * @param user Nazwa użytkownika.
     * @param password Hasło użytkownika.
     * @return Zwraca obiekt osoby zalogowanej do systemu. W razie błędnego logowania
     * zwrócona wartość równa jest null.
     */
    public Person loginUser(String user, String password) {
        NetworkManager manager = NetworkManager.getInstance();
  
        manager.sendPacket(new PacketLogin(user, password));
        IPacket packet = manager.receivePacket();
        
        if (packet instanceof PacketLoginResponse) {
            PacketLoginResponse response = (PacketLoginResponse)packet;
            
            if (response.status == 0) {
                Person person = null;
                
                switch (response.type) {
                    case Client:
                        person = new Client();
                        break;
                        
                    case Banker:
                        person = new Banker();
                        break;
                        
                    case Admin:
                        person = new Administrator();
                        break;
                }
                
                person.setUserId(response.userId);
                
                return person;
            }
        }
        
        return null;
    }
}
